{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "87250bb6",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import tushare as ts\n",
    "import time\n",
    "import re\n",
    "import os\n",
    "from funcs import *\n",
    "from sqlalchemy import text, create_engine\n",
    "from tqdm.notebook import tqdm\n",
    "from datetime import datetime,timedelta\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "import tushare as ts\n",
    "\n",
    "import statsmodels.api as sm\n",
    "from statsmodels.regression.rolling import RollingOLS\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei'] \n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "token = '1501ffe708345cffa38d9bbc0bd371e93b4b7412e7a8e1f811d3c442'\n",
    "ts.set_token(token)\n",
    "pro = ts.pro_api(token)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "id": "46da6001",
   "metadata": {},
   "outputs": [],
   "source": [
    "期货前缀 = 'J'\n",
    "df = get_df(期货前缀)\n",
    "df_close = df.pivot(index='t', columns='code', values='close')\n",
    "df_money = df.pivot(index='t', columns='code', values='amount')\n",
    "当前主力代码 = pd.Series(df_money.columns[np.argsort(-df_money.values,axis=1)[:,0]],\n",
    "                   index=df_money.index).shift(1)\n",
    "df_return = df_close.pct_change().apply(lambda x: x.get(当前主力代码.get(x.name)), axis=1)\n",
    "dd_ret = df_return.resample('M').sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "id": "df1a7f72",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# xx = df_close.pct_change(axis=1).sum(1)/(df_close.notnull().sum(1) - 1)\n",
    "xx = df_close.apply(lambda x:x.dropna().pct_change(),axis=1)\n",
    "xx = (xx*(xx > 0)).sum(1) / xx.abs().sum(1)\n",
    "xx = xx.rolling(20).mean()\n",
    "# xx = xx.rolling(20).mean().resample('M').last()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "id": "0c45fadf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x25b480c7700>"
      ]
     },
     "execution_count": 160,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sig = (xx > 0.8)*-1 + (xx < 0.2)*1\n",
    "ret = sig*df_return.shift(-1)\n",
    "# ret = sig*dd_ret.shift(-1)\n",
    "ret.cumsum().plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "id": "ccf4dc19",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.062"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sig.diff().abs().sum()*0.001"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e203d8c3",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6f099305",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "id": "2b0f027e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.045845</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.045845</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1\n",
       "0  1.000000 -0.045845\n",
       "1 -0.045845  1.000000"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.concat([xx,dd_ret.shift(-1)],axis=1).corr('spearman')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "b8953ffe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x25b46077640>"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "xx.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3508f307",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "id": "ec7213e6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-03-31</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.057567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-04-30</th>\n",
       "      <td>-0.013692</td>\n",
       "      <td>0.063781</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-05-31</th>\n",
       "      <td>-0.010660</td>\n",
       "      <td>0.047330</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-30</th>\n",
       "      <td>-0.010010</td>\n",
       "      <td>0.038077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-07-31</th>\n",
       "      <td>-0.007837</td>\n",
       "      <td>0.036486</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-08-31</th>\n",
       "      <td>-0.009270</td>\n",
       "      <td>0.164575</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-09-30</th>\n",
       "      <td>-0.011427</td>\n",
       "      <td>-0.077494</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-10-31</th>\n",
       "      <td>-0.009853</td>\n",
       "      <td>-0.106273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-11-30</th>\n",
       "      <td>-0.004761</td>\n",
       "      <td>-0.075966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-31</th>\n",
       "      <td>-0.002569</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>70 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                   0         1\n",
       "t                             \n",
       "2018-03-31       NaN  0.057567\n",
       "2018-04-30 -0.013692  0.063781\n",
       "2018-05-31 -0.010660  0.047330\n",
       "2018-06-30 -0.010010  0.038077\n",
       "2018-07-31 -0.007837  0.036486\n",
       "...              ...       ...\n",
       "2023-08-31 -0.009270  0.164575\n",
       "2023-09-30 -0.011427 -0.077494\n",
       "2023-10-31 -0.009853 -0.106273\n",
       "2023-11-30 -0.004761 -0.075966\n",
       "2023-12-31 -0.002569       NaN\n",
       "\n",
       "[70 rows x 2 columns]"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.concat([xx,dd_ret.shift(-1)],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d86f9e94",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f48e86f2",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "168d8cf3",
   "metadata": {},
   "outputs": [],
   "source": [
    "xx = df_close.apply(lambda x:x.dropna().pct_change(),axis=1)\n",
    "xx = (xx*(xx > 0)).sum(1) / xx.abs().sum(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "id": "712434f0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x25b469ce640>"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "xx.rolling(20).mean().plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "444c61a5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "t\n",
       "2018-03-26    0.112820\n",
       "2018-03-27    0.129972\n",
       "2018-03-28    0.151926\n",
       "2018-03-29    0.148211\n",
       "2018-03-30    0.126479\n",
       "                ...   \n",
       "2023-12-11    0.095700\n",
       "2023-12-12    0.141842\n",
       "2023-12-13    0.083163\n",
       "2023-12-14    0.118362\n",
       "2023-12-15    0.102528\n",
       "Length: 1393, dtype: float64"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xx.abs().sum(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "49db3d58",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "270ff74e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>code</th>\n",
       "      <th>1809</th>\n",
       "      <th>1810</th>\n",
       "      <th>1811</th>\n",
       "      <th>1812</th>\n",
       "      <th>1901</th>\n",
       "      <th>1902</th>\n",
       "      <th>1903</th>\n",
       "      <th>1904</th>\n",
       "      <th>1905</th>\n",
       "      <th>1906</th>\n",
       "      <th>...</th>\n",
       "      <th>2411</th>\n",
       "      <th>2412</th>\n",
       "      <th>2503</th>\n",
       "      <th>2506</th>\n",
       "      <th>2509</th>\n",
       "      <th>2512</th>\n",
       "      <th>2603</th>\n",
       "      <th>2606</th>\n",
       "      <th>2609</th>\n",
       "      <th>2612</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-03-26</th>\n",
       "      <td>429.9</td>\n",
       "      <td>426.4</td>\n",
       "      <td>422.1</td>\n",
       "      <td>421.2</td>\n",
       "      <td>420.1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>415.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>406.7</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-27</th>\n",
       "      <td>424.0</td>\n",
       "      <td>421.3</td>\n",
       "      <td>417.4</td>\n",
       "      <td>415.4</td>\n",
       "      <td>414.0</td>\n",
       "      <td>416.0</td>\n",
       "      <td>408.1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>406.4</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-28</th>\n",
       "      <td>410.4</td>\n",
       "      <td>405.3</td>\n",
       "      <td>407.4</td>\n",
       "      <td>406.6</td>\n",
       "      <td>402.7</td>\n",
       "      <td>399.9</td>\n",
       "      <td>397.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>388.4</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-29</th>\n",
       "      <td>409.7</td>\n",
       "      <td>406.6</td>\n",
       "      <td>405.1</td>\n",
       "      <td>405.0</td>\n",
       "      <td>400.0</td>\n",
       "      <td>400.4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>390.6</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-30</th>\n",
       "      <td>420.3</td>\n",
       "      <td>418.1</td>\n",
       "      <td>414.6</td>\n",
       "      <td>415.0</td>\n",
       "      <td>408.0</td>\n",
       "      <td>408.7</td>\n",
       "      <td>406.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>402.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-11</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>546.0</td>\n",
       "      <td>546.0</td>\n",
       "      <td>540.4</td>\n",
       "      <td>544.1</td>\n",
       "      <td>536.0</td>\n",
       "      <td>534.2</td>\n",
       "      <td>539.8</td>\n",
       "      <td>535.9</td>\n",
       "      <td>530.0</td>\n",
       "      <td>528.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-12</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>550.3</td>\n",
       "      <td>555.0</td>\n",
       "      <td>540.4</td>\n",
       "      <td>544.1</td>\n",
       "      <td>536.0</td>\n",
       "      <td>532.1</td>\n",
       "      <td>539.8</td>\n",
       "      <td>537.0</td>\n",
       "      <td>530.0</td>\n",
       "      <td>528.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-13</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>535.0</td>\n",
       "      <td>535.3</td>\n",
       "      <td>533.0</td>\n",
       "      <td>528.1</td>\n",
       "      <td>529.0</td>\n",
       "      <td>525.8</td>\n",
       "      <td>526.5</td>\n",
       "      <td>525.0</td>\n",
       "      <td>524.3</td>\n",
       "      <td>519.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-14</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>526.6</td>\n",
       "      <td>532.5</td>\n",
       "      <td>533.0</td>\n",
       "      <td>528.1</td>\n",
       "      <td>529.2</td>\n",
       "      <td>525.8</td>\n",
       "      <td>526.5</td>\n",
       "      <td>530.0</td>\n",
       "      <td>524.3</td>\n",
       "      <td>519.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-15</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>544.6</td>\n",
       "      <td>546.7</td>\n",
       "      <td>534.7</td>\n",
       "      <td>532.1</td>\n",
       "      <td>531.0</td>\n",
       "      <td>525.8</td>\n",
       "      <td>526.6</td>\n",
       "      <td>530.0</td>\n",
       "      <td>524.3</td>\n",
       "      <td>519.6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1393 rows × 84 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "code         1809   1810   1811   1812   1901   1902   1903  1904  1905  \\\n",
       "t                                                                         \n",
       "2018-03-26  429.9  426.4  422.1  421.2  420.1    NaN  415.0   NaN   NaN   \n",
       "2018-03-27  424.0  421.3  417.4  415.4  414.0  416.0  408.1   NaN   NaN   \n",
       "2018-03-28  410.4  405.3  407.4  406.6  402.7  399.9  397.0   NaN   NaN   \n",
       "2018-03-29  409.7  406.6  405.1  405.0  400.0  400.4    NaN   NaN   NaN   \n",
       "2018-03-30  420.3  418.1  414.6  415.0  408.0  408.7  406.8   NaN   NaN   \n",
       "...           ...    ...    ...    ...    ...    ...    ...   ...   ...   \n",
       "2023-12-11    NaN    NaN    NaN    NaN    NaN    NaN    NaN   NaN   NaN   \n",
       "2023-12-12    NaN    NaN    NaN    NaN    NaN    NaN    NaN   NaN   NaN   \n",
       "2023-12-13    NaN    NaN    NaN    NaN    NaN    NaN    NaN   NaN   NaN   \n",
       "2023-12-14    NaN    NaN    NaN    NaN    NaN    NaN    NaN   NaN   NaN   \n",
       "2023-12-15    NaN    NaN    NaN    NaN    NaN    NaN    NaN   NaN   NaN   \n",
       "\n",
       "code         1906  ...   2411   2412   2503   2506   2509   2512   2603  \\\n",
       "t                  ...                                                    \n",
       "2018-03-26  406.7  ...    NaN    NaN    NaN    NaN    NaN    NaN    NaN   \n",
       "2018-03-27  406.4  ...    NaN    NaN    NaN    NaN    NaN    NaN    NaN   \n",
       "2018-03-28  388.4  ...    NaN    NaN    NaN    NaN    NaN    NaN    NaN   \n",
       "2018-03-29  390.6  ...    NaN    NaN    NaN    NaN    NaN    NaN    NaN   \n",
       "2018-03-30  402.0  ...    NaN    NaN    NaN    NaN    NaN    NaN    NaN   \n",
       "...           ...  ...    ...    ...    ...    ...    ...    ...    ...   \n",
       "2023-12-11    NaN  ...  546.0  546.0  540.4  544.1  536.0  534.2  539.8   \n",
       "2023-12-12    NaN  ...  550.3  555.0  540.4  544.1  536.0  532.1  539.8   \n",
       "2023-12-13    NaN  ...  535.0  535.3  533.0  528.1  529.0  525.8  526.5   \n",
       "2023-12-14    NaN  ...  526.6  532.5  533.0  528.1  529.2  525.8  526.5   \n",
       "2023-12-15    NaN  ...  544.6  546.7  534.7  532.1  531.0  525.8  526.6   \n",
       "\n",
       "code         2606   2609   2612  \n",
       "t                                \n",
       "2018-03-26    NaN    NaN    NaN  \n",
       "2018-03-27    NaN    NaN    NaN  \n",
       "2018-03-28    NaN    NaN    NaN  \n",
       "2018-03-29    NaN    NaN    NaN  \n",
       "2018-03-30    NaN    NaN    NaN  \n",
       "...           ...    ...    ...  \n",
       "2023-12-11  535.9  530.0  528.5  \n",
       "2023-12-12  537.0  530.0  528.5  \n",
       "2023-12-13  525.0  524.3  519.6  \n",
       "2023-12-14  530.0  524.3  519.6  \n",
       "2023-12-15  530.0  524.3  519.6  \n",
       "\n",
       "[1393 rows x 84 columns]"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_close"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "31022ee4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "t\n",
       "2018-03-26     9\n",
       "2018-03-27    11\n",
       "2018-03-28    13\n",
       "2018-03-29    10\n",
       "2018-03-30    13\n",
       "              ..\n",
       "2023-12-11    19\n",
       "2023-12-12    19\n",
       "2023-12-13    19\n",
       "2023-12-14    19\n",
       "2023-12-15    19\n",
       "Length: 1393, dtype: int64"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_close.notnull().sum(1) - 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a3388d0a",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "238b95ae",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fcbe5c43",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "69e832ed",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "code\n",
       "2402    0.004964\n",
       "2403    0.003659\n",
       "2404    0.000365\n",
       "2405    0.000364\n",
       "2406    0.000000\n",
       "2407    0.003643\n",
       "2408   -0.014519\n",
       "2409   -0.000921\n",
       "2410    0.002028\n",
       "2411    0.001840\n",
       "2412    0.003856\n",
       "2503   -0.021950\n",
       "2506   -0.004863\n",
       "2509   -0.002067\n",
       "2512   -0.009793\n",
       "2603    0.001521\n",
       "2606    0.006457\n",
       "2609   -0.010755\n",
       "2612   -0.008964\n",
       "Name: 2023-12-15 00:00:00, dtype: float64"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_close.pct_change(axis=1).loc['2023-12-15'].dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ca6512ab",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "b5047cf3",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>code</th>\n",
       "      <th>1809</th>\n",
       "      <th>1810</th>\n",
       "      <th>1811</th>\n",
       "      <th>1812</th>\n",
       "      <th>1901</th>\n",
       "      <th>1902</th>\n",
       "      <th>1903</th>\n",
       "      <th>1904</th>\n",
       "      <th>1905</th>\n",
       "      <th>1906</th>\n",
       "      <th>...</th>\n",
       "      <th>2411</th>\n",
       "      <th>2412</th>\n",
       "      <th>2503</th>\n",
       "      <th>2506</th>\n",
       "      <th>2509</th>\n",
       "      <th>2512</th>\n",
       "      <th>2603</th>\n",
       "      <th>2606</th>\n",
       "      <th>2609</th>\n",
       "      <th>2612</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-03-26</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-27</th>\n",
       "      <td>-32607.76</td>\n",
       "      <td>-21026.52</td>\n",
       "      <td>-3625.42</td>\n",
       "      <td>-6450.28</td>\n",
       "      <td>-2972.72</td>\n",
       "      <td>NaN</td>\n",
       "      <td>407.52</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-11193.88</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-28</th>\n",
       "      <td>1051704.92</td>\n",
       "      <td>1499.46</td>\n",
       "      <td>3827.08</td>\n",
       "      <td>38428.38</td>\n",
       "      <td>237.78</td>\n",
       "      <td>481.70</td>\n",
       "      <td>1200.76</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>942.44</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-29</th>\n",
       "      <td>-70774.16</td>\n",
       "      <td>-8624.80</td>\n",
       "      <td>-4401.32</td>\n",
       "      <td>-36015.46</td>\n",
       "      <td>-1075.40</td>\n",
       "      <td>-568.04</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>61.88</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-30</th>\n",
       "      <td>-299067.48</td>\n",
       "      <td>-784.00</td>\n",
       "      <td>-799.02</td>\n",
       "      <td>-5278.66</td>\n",
       "      <td>244.30</td>\n",
       "      <td>323.48</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-374.42</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-11</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.00</td>\n",
       "      <td>-764.28</td>\n",
       "      <td>54.48</td>\n",
       "      <td>0.00</td>\n",
       "      <td>-53.50</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>-428.77</td>\n",
       "      <td>-212.03</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-12</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.00</td>\n",
       "      <td>330.23</td>\n",
       "      <td>-108.08</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>106.42</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-13</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.00</td>\n",
       "      <td>266.06</td>\n",
       "      <td>53.30</td>\n",
       "      <td>52.81</td>\n",
       "      <td>105.85</td>\n",
       "      <td>-106.42</td>\n",
       "      <td>52.65</td>\n",
       "      <td>212.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-14</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>211.37</td>\n",
       "      <td>-436.85</td>\n",
       "      <td>-53.30</td>\n",
       "      <td>-52.81</td>\n",
       "      <td>-105.85</td>\n",
       "      <td>0.00</td>\n",
       "      <td>-52.65</td>\n",
       "      <td>-212.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-15</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>-211.37</td>\n",
       "      <td>113.21</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1393 rows × 84 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "code              1809      1810     1811      1812     1901    1902     1903  \\\n",
       "t                                                                               \n",
       "2018-03-26         NaN       NaN      NaN       NaN      NaN     NaN      NaN   \n",
       "2018-03-27   -32607.76 -21026.52 -3625.42  -6450.28 -2972.72     NaN   407.52   \n",
       "2018-03-28  1051704.92   1499.46  3827.08  38428.38   237.78  481.70  1200.76   \n",
       "2018-03-29   -70774.16  -8624.80 -4401.32 -36015.46 -1075.40 -568.04      NaN   \n",
       "2018-03-30  -299067.48   -784.00  -799.02  -5278.66   244.30  323.48      NaN   \n",
       "...                ...       ...      ...       ...      ...     ...      ...   \n",
       "2023-12-11         NaN       NaN      NaN       NaN      NaN     NaN      NaN   \n",
       "2023-12-12         NaN       NaN      NaN       NaN      NaN     NaN      NaN   \n",
       "2023-12-13         NaN       NaN      NaN       NaN      NaN     NaN      NaN   \n",
       "2023-12-14         NaN       NaN      NaN       NaN      NaN     NaN      NaN   \n",
       "2023-12-15         NaN       NaN      NaN       NaN      NaN     NaN      NaN   \n",
       "\n",
       "code        1904  1905      1906  ...    2411    2412    2503   2506    2509  \\\n",
       "t                                 ...                                          \n",
       "2018-03-26   NaN   NaN       NaN  ...     NaN     NaN     NaN    NaN     NaN   \n",
       "2018-03-27   NaN   NaN -11193.88  ...     NaN     NaN     NaN    NaN     NaN   \n",
       "2018-03-28   NaN   NaN    942.44  ...     NaN     NaN     NaN    NaN     NaN   \n",
       "2018-03-29   NaN   NaN     61.88  ...     NaN     NaN     NaN    NaN     NaN   \n",
       "2018-03-30   NaN   NaN   -374.42  ...     NaN     NaN     NaN    NaN     NaN   \n",
       "...          ...   ...       ...  ...     ...     ...     ...    ...     ...   \n",
       "2023-12-11   NaN   NaN       NaN  ...    0.00 -764.28   54.48   0.00  -53.50   \n",
       "2023-12-12   NaN   NaN       NaN  ...    0.00  330.23 -108.08   0.00    0.00   \n",
       "2023-12-13   NaN   NaN       NaN  ...    0.00  266.06   53.30  52.81  105.85   \n",
       "2023-12-14   NaN   NaN       NaN  ...  211.37 -436.85  -53.30 -52.81 -105.85   \n",
       "2023-12-15   NaN   NaN       NaN  ... -211.37  113.21    0.00   0.00    0.00   \n",
       "\n",
       "code          2512   2603    2606    2609  2612  \n",
       "t                                                \n",
       "2018-03-26     NaN    NaN     NaN     NaN   NaN  \n",
       "2018-03-27     NaN    NaN     NaN     NaN   NaN  \n",
       "2018-03-28     NaN    NaN     NaN     NaN   NaN  \n",
       "2018-03-29     NaN    NaN     NaN     NaN   NaN  \n",
       "2018-03-30     NaN    NaN     NaN     NaN   NaN  \n",
       "...            ...    ...     ...     ...   ...  \n",
       "2023-12-11    0.00   0.00 -428.77 -212.03   0.0  \n",
       "2023-12-12  106.42   0.00    0.00    0.00   0.0  \n",
       "2023-12-13 -106.42  52.65  212.00    0.00   0.0  \n",
       "2023-12-14    0.00 -52.65 -212.00    0.00   0.0  \n",
       "2023-12-15    0.00   0.00    0.00    0.00   0.0  \n",
       "\n",
       "[1393 rows x 84 columns]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_money.diff()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "bcb153a1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>code</th>\n",
       "      <th>1809</th>\n",
       "      <th>1810</th>\n",
       "      <th>1811</th>\n",
       "      <th>1812</th>\n",
       "      <th>1901</th>\n",
       "      <th>1902</th>\n",
       "      <th>1903</th>\n",
       "      <th>1904</th>\n",
       "      <th>1905</th>\n",
       "      <th>1906</th>\n",
       "      <th>...</th>\n",
       "      <th>2411</th>\n",
       "      <th>2412</th>\n",
       "      <th>2503</th>\n",
       "      <th>2506</th>\n",
       "      <th>2509</th>\n",
       "      <th>2512</th>\n",
       "      <th>2603</th>\n",
       "      <th>2606</th>\n",
       "      <th>2609</th>\n",
       "      <th>2612</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-03-26</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-27</th>\n",
       "      <td>0.025715</td>\n",
       "      <td>-0.011227</td>\n",
       "      <td>-0.001925</td>\n",
       "      <td>-0.003327</td>\n",
       "      <td>-0.001597</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000239</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.006097</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-28</th>\n",
       "      <td>-0.011219</td>\n",
       "      <td>-0.001518</td>\n",
       "      <td>0.000898</td>\n",
       "      <td>0.011827</td>\n",
       "      <td>-0.000118</td>\n",
       "      <td>0.000132</td>\n",
       "      <td>0.000277</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000295</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-29</th>\n",
       "      <td>0.018151</td>\n",
       "      <td>-0.002990</td>\n",
       "      <td>-0.001521</td>\n",
       "      <td>-0.012473</td>\n",
       "      <td>-0.000376</td>\n",
       "      <td>-0.000198</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000040</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-30</th>\n",
       "      <td>0.001522</td>\n",
       "      <td>-0.000223</td>\n",
       "      <td>-0.000263</td>\n",
       "      <td>-0.001721</td>\n",
       "      <td>0.000104</td>\n",
       "      <td>0.000137</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.000101</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-11</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.000036</td>\n",
       "      <td>0.000005</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.000003</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.000020</td>\n",
       "      <td>-0.00001</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-12</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000025</td>\n",
       "      <td>-0.000008</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000008</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-13</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000011</td>\n",
       "      <td>0.000003</td>\n",
       "      <td>0.000003</td>\n",
       "      <td>0.000006</td>\n",
       "      <td>-0.000008</td>\n",
       "      <td>0.000003</td>\n",
       "      <td>0.000013</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-14</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000016</td>\n",
       "      <td>-0.000024</td>\n",
       "      <td>-0.000003</td>\n",
       "      <td>-0.000003</td>\n",
       "      <td>-0.000006</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.000003</td>\n",
       "      <td>-0.000013</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-12-15</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.000016</td>\n",
       "      <td>0.000015</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1393 rows × 84 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "code            1809      1810      1811      1812      1901      1902  \\\n",
       "t                                                                        \n",
       "2018-03-26       NaN       NaN       NaN       NaN       NaN       NaN   \n",
       "2018-03-27  0.025715 -0.011227 -0.001925 -0.003327 -0.001597       NaN   \n",
       "2018-03-28 -0.011219 -0.001518  0.000898  0.011827 -0.000118  0.000132   \n",
       "2018-03-29  0.018151 -0.002990 -0.001521 -0.012473 -0.000376 -0.000198   \n",
       "2018-03-30  0.001522 -0.000223 -0.000263 -0.001721  0.000104  0.000137   \n",
       "...              ...       ...       ...       ...       ...       ...   \n",
       "2023-12-11       NaN       NaN       NaN       NaN       NaN       NaN   \n",
       "2023-12-12       NaN       NaN       NaN       NaN       NaN       NaN   \n",
       "2023-12-13       NaN       NaN       NaN       NaN       NaN       NaN   \n",
       "2023-12-14       NaN       NaN       NaN       NaN       NaN       NaN   \n",
       "2023-12-15       NaN       NaN       NaN       NaN       NaN       NaN   \n",
       "\n",
       "code            1903  1904  1905      1906  ...      2411      2412      2503  \\\n",
       "t                                           ...                                 \n",
       "2018-03-26       NaN   NaN   NaN       NaN  ...       NaN       NaN       NaN   \n",
       "2018-03-27  0.000239   NaN   NaN -0.006097  ...       NaN       NaN       NaN   \n",
       "2018-03-28  0.000277   NaN   NaN  0.000295  ...       NaN       NaN       NaN   \n",
       "2018-03-29       NaN   NaN   NaN  0.000040  ...       NaN       NaN       NaN   \n",
       "2018-03-30       NaN   NaN   NaN -0.000101  ...       NaN       NaN       NaN   \n",
       "...              ...   ...   ...       ...  ...       ...       ...       ...   \n",
       "2023-12-11       NaN   NaN   NaN       NaN  ...  0.000000 -0.000036  0.000005   \n",
       "2023-12-12       NaN   NaN   NaN       NaN  ...  0.000000  0.000025 -0.000008   \n",
       "2023-12-13       NaN   NaN   NaN       NaN  ...  0.000000  0.000011  0.000003   \n",
       "2023-12-14       NaN   NaN   NaN       NaN  ...  0.000016 -0.000024 -0.000003   \n",
       "2023-12-15       NaN   NaN   NaN       NaN  ... -0.000016  0.000015  0.000000   \n",
       "\n",
       "code            2506      2509      2512      2603      2606     2609  2612  \n",
       "t                                                                            \n",
       "2018-03-26       NaN       NaN       NaN       NaN       NaN      NaN   NaN  \n",
       "2018-03-27       NaN       NaN       NaN       NaN       NaN      NaN   NaN  \n",
       "2018-03-28       NaN       NaN       NaN       NaN       NaN      NaN   NaN  \n",
       "2018-03-29       NaN       NaN       NaN       NaN       NaN      NaN   NaN  \n",
       "2018-03-30       NaN       NaN       NaN       NaN       NaN      NaN   NaN  \n",
       "...              ...       ...       ...       ...       ...      ...   ...  \n",
       "2023-12-11  0.000000 -0.000003  0.000000  0.000000 -0.000020 -0.00001   0.0  \n",
       "2023-12-12  0.000000  0.000000  0.000008  0.000000  0.000000  0.00000   0.0  \n",
       "2023-12-13  0.000003  0.000006 -0.000008  0.000003  0.000013  0.00000   0.0  \n",
       "2023-12-14 -0.000003 -0.000006  0.000000 -0.000003 -0.000013  0.00000   0.0  \n",
       "2023-12-15  0.000000  0.000000  0.000000  0.000000  0.000000  0.00000   0.0  \n",
       "\n",
       "[1393 rows x 84 columns]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_money.div(df_money.sum(1),axis=0).diff()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ceaed22b",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d3464035",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
